package abel.wlmr.model.type;

import abel.wlmr.model.WlmrField;

/**
 * B.4.3.3.3.4 主站地址和组地址标志A3
 * A3 的 D0 位为终端组地址标志， D0=0 表示终端地址 A2 为单地址； D0=1 表示终端地址 A2 为组地
 * 址； A3 的 D1～D7 组成 0～127 个主站地址 MSA。
 * ——主站启动的发送帧的 MSA 应为非零值，其终端响应帧的 MSA 应与主站发送帧的 MSA 相同。
 * ——终端启动发送帧的 MSA 应为零，其主站响应帧的 MSA 也应为零
 * 
 * @author Abel
 *
 */
public class GroupFlagAddrField extends WlmrField {

    private boolean groupFlag;

    private byte addr;

    public GroupFlagAddrField() {
        super(1);
    }

    /* (non-Javadoc)
     * @see abel.wlmr.model.WlmrField#getByteValue()
     */
    @Override
    public int getValue() {
        return (short) (groupFlag ? (addr << 1 | 1) : (addr << 1));
    }

    /* (non-Javadoc)
     * @see abel.wlmr.model.WlmrField#parseByteValue(byte)
     */
    @Override
    public void parseValue(int b) {
        groupFlag = (0x01 & b) == 1;

        addr = (byte) ((b >> 1) & 0x7F);
    }

    /**
     * @return the groupFlag
     */
    public boolean isGroupFlag() {
        return groupFlag;
    }

    /**
     * @param groupFlag
     *            the groupFlag to set
     */
    public void setGroupFlag(boolean groupFlag) {
        this.groupFlag = groupFlag;
    }

    /**
     * @return the addr
     */
    public byte getAddr() {
        return addr;
    }

    /**
     * @param addr
     *            the addr to set
     */
    public void setAddr(byte addr) {
        if (addr < 0 || addr > 127) {
            throw new IllegalArgumentException("addr should be [0,127]");
        }

        this.addr = addr;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return String.format("{groupFlag:%s, addr:%s}", groupFlag, addr);
    }

}
